'\" te
.\"  Copyright (c) 2001 Sun Microsystems, Inc.
.\"  All Rights Reserved.
.\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License").  You may not use this file except in compliance with the License.
.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing.  See the License for the specific language governing permissions and limitations under the License.
.\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE.  If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
.TH DDI_MMAP_GET_MODEL 9F "Feb 8, 2001"
.SH NAME
ddi_mmap_get_model \- return data model type of current thread
.SH SYNOPSIS
.nf
#include <sys/ddi.h>
#include <sys/sunddi.h>



\fBuint_t\fR \fBddi_mmap_get_model\fR(\fBvoid\fR);
.fi

.SH INTERFACE LEVEL
illumos DDI specific (illumos DDI).
.SH DESCRIPTION
\fBddi_mmap_get_model()\fR returns the \fIC\fR Language Type Model which the
current thread expects. \fBddi_mmap_get_model()\fR is used in combination with
\fBddi_model_convert_from\fR(9F) in the \fBmmap\fR(9E) driver entry point to
determine whether there is a data model mismatch between the current thread and
the device driver. The device driver might have to adjust the shape of data
structures before exporting them to a user thread which supports a different
data model.
.SH RETURN VALUES
.ne 2
.na
\fB\fBDDI_MODEL_ILP32\fR \fR
.ad
.RS 20n
Current thread expects 32-bit \fI(ILP32)\fR semantics.
.RE

.sp
.ne 2
.na
\fB\fBDDI_MODEL_LP64\fR \fR
.ad
.RS 20n
Current thread expects 64-bit \fI(LP64)\fR semantics.
.RE

.sp
.ne 2
.na
\fB\fBDDI_FAILURE\fR \fR
.ad
.RS 20n
The \fBddi_mmap_get_model()\fR function was not called from the \fBmmap\fR(9E)
entry point.
.RE

.SH CONTEXT
The \fBddi_mmap_get_model()\fR function can only be called from the
\fBmmap\fR(9E) driver entry point.
.SH EXAMPLES
\fBExample 1 \fR: Using \fBddi_mmap_get_model()\fR
.sp
.LP
The following is an example of the \fBmmap\fR(9E) entry point and how to
support 32-bit and 64-bit applications with the same device driver.

.sp
.in +2
.nf
struct data32 {
        int len;
        caddr32_t addr;
};

struct data {
        int len;
        caddr_t addr;
};
xxmmap(dev_t dev, off_t off, int prot) {
        struct data dtc; /* a local copy for clash resolution */
        struct data *dp = (struct data *)shared_area;

        switch (ddi_model_convert_from(ddi_mmap_get_model())) {
        case DDI_MODEL_ILP32:
        {
                struct data32 *da32p;

                da32p = (struct data32 *)shared_area;
                dp = &dtc;
                dp->len = da32p->len;
                dp->address = da32->address;
                break;
        }
        case DDI_MODEL_NONE:
                break;
        }
        /* continues along using dp */
       \&.\|.\|.
}
.fi
.in -2

.SH SEE ALSO
.BR mmap (9E),
.BR ddi_model_convert_from (9F)
.sp
.LP
\fIWriting Device Drivers\fR
